﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Xml;
using Tracy.Agent.DownloaderAdapter;
using Tracy.CoreLib.Data;
using Tracy.CoreLib;
using Tracy.Engine;
using System.IO;
using System.Collections.Specialized;
using System.Reflection;
using CoreLib.Message;


namespace Tracy
{
    public partial class FormMain : AbstractMessageHandlerForm
    {

        protected override void EndProcessMessage(ITracyMessage msg)
        {
            if (msg.Sender == this)//由本窗体发出的消息
            {
                if (msg is UpdateItemMessage)
                {
                    UpdateItemMessage tmpMsg = ((UpdateItemMessage)msg);
                    EndUpdateItem(tmpMsg.Item, tmpMsg.Key, tmpMsg.Value);
                }
                else if (msg is UpdateFeedMessage) EndUpdateFeed();
                else if (msg is AddItemMessage) EndAddItem((AddItemMessage)msg);
                else if (msg is RemoveItemMessage) EndRemoveItem((RemoveItemMessage)msg);
                else if (msg is ReplaceItemMessage) EndReplaceItem((ReplaceItemMessage)msg);
                else if (msg is InitEngineMessage) LoadUIData();
                else if (msg is DownloadMessage) toolStripButtonDownload.Enabled = true;
            }
        }

        private void EndReplaceItem(ReplaceItemMessage msg)
        {
            if (msg.Item is RssFeedSource)
            {
                listBoxFeedSource.Items.Remove(msg.ItemToReplace);
                listBoxFeedSource.Items.Add(msg.Item);
                
            }
            else if (msg.Item is RssFilter)
            {
                listBoxFilter.Items.Remove(msg.ItemToReplace);
                listBoxFilter.Items.Add(msg.Item);
                
            }
            else
            {
                throw new NotImplementedException();
            }
        }

        private void EndRemoveItem(RemoveItemMessage msg)
        {
            if (msg.Item is ResourceItem)
            {
                listViewTasks.Items.RemoveByKey(msg.Item.Id.ToString());
            }
            else if (msg.Item is RssFeedSource)
            {
                listBoxFeedSource.Items.Remove(msg.Item);
            }
            else if (msg.Item is RssFilter)
            {
                listBoxFilter.Items.Remove(msg.Item);
            }
            else
            {
                throw new NotImplementedException();
            }
        }

        private void EndUpdateItem(IManagedXmlModelItem item, string key, string value)
        {
            if (item is ResourceItem && key == Constants.CONST_TAG_STATUS)
            {
                listViewTasks.Items[item.Id.ToString()].SubItems[LISTVIEWTASK_COLUMN_STATUS].Text = value;
            }
            else
            {
                throw new NotImplementedException();
            }
        }

        private void EndAddItem(AddItemMessage msg)
        {
            if (msg.Item is ResourceItem)
            {
                AddResourceToListView((ResourceItem)msg.Item);
            }
            else if (msg.Item is RssFeedSource)
            {
                listBoxFeedSource.Items.Add(msg.Item);
            }
            else if (msg.Item is RssFilter)
            {
                listBoxFilter.Items.Add(msg.Item);
            }
            else
            {
                throw new NotImplementedException();
            }
        }

        private void EndUpdateFeed()
        {
            int result = tracyEngine.MessageGenerator.RetrieveNewResource(this);
            if (result == 0) MessageBox.Show(Constants.CONST_MOE_MESSAGE_NOINCOMING);
            else MessageBox.Show(Constants.CONST_MOE_MESSAGE_INCOMINGFOUND.Replace("%d", result.ToString()));

            toolStripButtonUpdateFeed.Enabled = true;
        }
    }
}